package com.aididi.jichu;


import java.util.Arrays;

/**
 * @Auther: xuzexiang
 * @Date: 2018-11-2 0002 16:31
 * @Description:
 * 当然如果针对 Java 语言本身来讲，Java 中只有 值传递，没有引用传递，是正确的
 * 但是如果针对 值传递，引用传递的定义来说，Java 中还是有引用传递的。
 *
 * 就 Java 语言本身来说，只有值传递，没有引用传递。
 * 根据 值传递，引用传递的定义来说：
 *     java中的基本类型，属于值传递。
 *     java中的引用类型，属于引用传递。
 *     java中的 String 及包装类，属于特殊群体，作为形参时，由于每次赋值都相当于重新创建了对象，因此看起来像值传递，
 *     但是其特性已经破坏了，值传递、引用传递的定义。因此他们属于引用传递的定义，却表现为值传递。
 */
public class ChuanDi {

    public static void main(String[] args) {
        String str = "hello";
        char[] ch = {'a', 'b'}; //（数组类型引用和对象）
        int c = 1;
        ChuanDi.change(str, ch,c);
        System.out.println(str + " and");
        System.out.println(Arrays.toString(ch)+ " and");
        System.out.println(c);
        String a =new String("aa");
        String b = new String("aa");
        System.out.println(a.equals(b));
        System.out.println(a==b);
        System.out.println(a.hashCode()==b.hashCode()); //equals相同，hashcode一定相同
        System.out.println(Integer.toBinaryString(1));

    }

    private static void change(String str, char[] ch, int c) {
        str = "ok";
        ch[0] = 'c';
        c =2;
    }
}
